const nunjucks = require('nunjucks')

function createEnv (path, opts) {
  let
    autoescape = opts.autoescape === undefined ? true : opts.autoescape,
    noCache = opts.noCache || false,
    watch = opts.watch || false,
    throwOnUndefined = opts.throwOnUndefined || false,
    env = new nunjucks.Environment(
      new nunjucks.FileSystemLoader(path || 'views', {
        noCache: noCache,
        watch: watch
      }), {
        autoescape: autoescape,
        throwOnUndefined: throwOnUndefined
      })
    if (opts.filter) {
      for (var f in opts.filters) {
        env.addFilter(f, opts.filter[f])
      }
    }
    return env
}

function templating (path, opts) {
  let env = createEnv(path, opts)
  return async (ctx, next) => {
    ctx.render = function (view, model) {
      ctx.response.body = env.render(view, Object.assign({}, ctx.state || {}, model || {}))
      ctx.response.type = 'text/html'
    }
    await next()
  }
}

module.exports = templating
